
interface Human{//定义一个Human接口
    //包含一个抽象方法sayHi(),返回类型为double
   public abstract double sayHi();
}

class Chinese implements Human{//定义一个类Chinese，实现接口Human
    String name;//定义一个成员变量name
    Chinese(String name){//定义一个有参的构造方法，用于初始化name
        this.name = name;
    }
    public double sayHi(){//实现接口中的抽象方法sayHi()
        System.out.println("你好！");//用中文输出问候语
        return "你好！".length();//返回问候语的长度
    }
}

class Japanese implements Human{//定义一个类Japanese，实现接口Human
    String name;//定义一个成员变量name
    Japanese(String name){//定义一个有参的构造方法，用于初始化name
        this.name = name;
    }
    public double sayHi(){//实现接口中的抽象方法sayHi()
        System.out.println("こんにちは！");//用日文输出问候语
        return "こんにちは！".length();//返回问候语的长度
    }
}

class English implements Human{//定义一个类English，实现接口Human
    String name;//定义一个成员变量name
    English(String name){//定义一个有参的构造方法，用于初始化name
        this.name = name;
    }
    public double sayHi(){//实现接口中的抽象方法sayHi()
        System.out.println("Hello！");//用英文输出问候语
        return "Hello！".length();//返回问候语的长度
    }
}

public class Test01 {
    public static void main(String[] args) {
        //创建一个包含三个Human接口变量的数组
        Human[] people = new Human[3];
        //分别实例化三个实现了Human接口的类的对象，将其引用依次赋给people数组中的三个接口变量
        people[0] = new Chinese("NO.1");
        people[1] = new Japanese("NO.2");
        people[2] = new English("NO.3");

        //通过循环遍历people中的元素，对元素中的每个元素进行接口回调。并将返回值输出。
        for (int i = 0; i < people.length; i++) {
            System.out.println(people[i].sayHi());
        }
    }
}
